const express = require('express');
const dotenv = require('dotenv');
const mysql = require('mysql2/promise');

// 加载环境变量
dotenv.config();

// 创建Express应用实例
const app = express();

// 配置中间件，用于解析请求体
app.use(express.json()); // 解析JSON格式的请求体
app.use(express.urlencoded({ extended: true })); // 解析URL编码的请求体

// 配置MySQL数据库连接池
const pool = mysql.createPool({
  host: process.env.DB_HOST, // 数据库主机地址
  user: process.env.DB_USER, // 数据库用户名
  password: process.env.DB_PASSWORD, // 数据库密码
  database: process.env.DB_DATABASE, // 数据库名称
  waitForConnections: true, // 是否等待连接
  connectionLimit: 10, // 最大连接数
  queueLimit: 0 // 队列限制（0表示不限制）
});

// 将数据库连接池添加到请求对象中，使所有路由都能访问数据库
app.use((req, res, next) => {
  req.db = pool;
  next();
});

// 导入路由模块
const authRouter = require('./routes/auth'); // 认证相关路由
const namingRouter = require('./routes/naming'); // 起名相关路由

// 配置根路由，返回API服务说明
app.get('/', (req, res) => {
  res.json({ message: 'AI起名服务API' });
});

// 注册路由模块
app.use('/auth', authRouter); // 处理认证相关的请求
app.use('/naming', namingRouter); // 处理起名相关的请求

// 全局错误处理中间件
app.use((err, req, res, next) => {
  console.error(err.stack); // 记录错误堆栈信息
  res.status(500).json({ error: '服务器内部错误' }); // 返回统一的错误响应
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`服务器运行在端口 ${PORT}`);
});

module.exports = app;